package com.cloud.diffdemo.callback;

import android.os.Bundle;

import androidx.annotation.Nullable;
import androidx.recyclerview.widget.DiffUtil;

import com.cloud.diffdemo.model.TestBean;

import java.util.List;

/**
 * @auth: njb
 * @date: 2024/11/20 23:29
 * @desc: Diff回调
 */
public class DiffCallBack extends DiffUtil.Callback {
    //旧数据集合
    private List<TestBean> mOldData;
    //新数据集合
    private List<TestBean> mNewData;

    public DiffCallBack(List<TestBean> mOldDatas, List<TestBean> mNewDatas) {
        this.mOldData = mOldDatas;
        this.mNewData = mNewDatas;
    }

    @Override
    public int getOldListSize() {
        return mOldData != null ? mOldData.size() : 0;
    }

    @Override
    public int getNewListSize() {
        return mNewData != null ? mNewData.size() : 0;
    }

    @Override
    public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
        return mOldData.get(oldItemPosition).getName().equals(mNewData.get(newItemPosition).getName());
    }

    @Override
    public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
        TestBean beanOld = mOldData.get(oldItemPosition);
        TestBean beanNew = mNewData.get(newItemPosition);
        if (!beanOld.getContent().equals(beanNew.getContent())) {
            return false;//如果有内容不同，就返回false
        }
        if (beanOld.getPic() != beanNew.getPic()) {
            return false;//如果有内容不同，就返回false
        }
        if (beanOld.getLookNumber() != beanNew.getLookNumber()) {
            return false;//如果有内容不同，就返回false
        }
        if (beanOld.getCommentNumber() != beanNew.getCommentNumber()) {
            return false;//如果有内容不同，就返回false
        }
        return true; //默认两个data内容是相同的
    }

    @Nullable
    @Override
    public Object getChangePayload(int oldItemPosition, int newItemPosition) {
        //实现这个方法 就能成为文艺青年中的文艺青年
        // 定向刷新中的部分更新
        // 效率最高
        //只是没有了ItemChange的白光一闪动画，（反正我也觉得不太重要）
        TestBean oldBean = mOldData.get(oldItemPosition);
        TestBean newBean = mNewData.get(newItemPosition);

        //这里就不用比较核心字段了,一定相等
        Bundle payload = new Bundle();
        if (!oldBean.getContent().equals(newBean.getContent())) {
            payload.putString("KEY_DESC", newBean.getContent());
        }
        if (oldBean.getPic() != newBean.getPic()) {
            payload.putInt("KEY_PIC", newBean.getPic());
        }
        if (oldBean.getLookNumber() != newBean.getLookNumber()) {
            payload.putInt("KEY_LOOK_NUMBER", newBean.getLookNumber());
        }
        if (oldBean.getCommentNumber() != newBean.getCommentNumber()) {
            payload.putInt("KEY_COMMENT_NUMBER", newBean.getCommentNumber());
        }
        if (payload.isEmpty())//如果没有变化 就传空
            return null;
        return payload;
    }
}
